﻿using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using InvoiceInvoker.Logic;

namespace InvoiceInvoker.MvcUI.Models
{
	public class ProductModel
	{
		[ScaffoldColumn(false)]
		public int Id { get; set; }

		[ScaffoldColumn(false)]
		public int RegisteredSellerId { get; set; }

		[DisplayName("Nazwa")]
		[Required(ErrorMessage = "Podaj nazwę produktu")]
		[StringLength(60, ErrorMessage = "Nazwa produktu może mieć co najwyżej 60 znaków")]
		public string Name { get; set; }

		[DisplayName("PKWiU")]
		[StringLength(20, ErrorMessage = "PKWiU może mieć co najwyżej 20 znaków")]
		public string Pkwiu { get; set; }

		[DisplayName("Jednostka miary")]
		[Required(ErrorMessage = "Podaj jednostkę miary")]
		[StringLength(10, ErrorMessage = "Jednostka miary może mieć co najwyżej 10 znaków")]
		public string MeasureUnit { get; set; }

		[DisplayName("Cena netto")]
		[Required(ErrorMessage = "Podaj cenę netto")]
		[Range(0, (double)decimal.MaxValue, ErrorMessage = "Cena netto musi być większa lub równa 0")]
		public decimal NetPrice { get; set; }

		[DisplayName("Stawka VAT")]
		[Required(ErrorMessage = "Podaj stawkę VAT")]
		[StringLength(10, ErrorMessage = "Stawka VAT może mieć co najwyżej 60 znaków")]
		public string VatRate { get; set; }

		public ProductModel()
		{ }

		public ProductModel(int registeredSellerId)
		{
			RegisteredSellerId = registeredSellerId;
		}

		public ProductModel(RegisteredProduct registeredProduct)
		{
			Id = registeredProduct.Id;
			RegisteredSellerId = registeredProduct.RegisteredSellerId ?? 0;
			Name = registeredProduct.Name;
			Pkwiu = registeredProduct.Pkwiu;
			MeasureUnit = registeredProduct.MeasureUnit;
			NetPrice = registeredProduct.NetPrice ?? 0;
			VatRate = registeredProduct.VatRate;
		}

		public RegisteredProduct ToRegisteredProduct()
		{
			RegisteredProduct result = new RegisteredProduct();
			result.Id = Id;
			result.RegisteredSellerId = RegisteredSellerId;
			result.Name = Name;
			result.Pkwiu = Pkwiu;
			result.MeasureUnit = MeasureUnit;
			result.NetPrice = NetPrice;
			result.VatRate = VatRate;

			return result;
		}
	}
}